package com.lm.javassist.example;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;

public class ModifyClassExample {
    public static void main(String[] args) throws Exception {
        ClassPool pool = ClassPool.getDefault();

        // 获取已加载的类
        CtClass ctClass = pool.get("com.lm.javassist.ele.ExistingClass");

        // 添加新方法
        CtMethod newMethod = new CtMethod(CtClass.voidType, "newMethod", new CtClass[]{}, ctClass);
        newMethod.setModifiers(Modifier.PUBLIC);
        newMethod.setBody("{ System.out.println(\"This is a new method!\"); }");
        ctClass.addMethod(newMethod);

        // 保存修改后的类到磁盘
        ctClass.writeFile("./output");

        // 加载并使用修改后的类
        Class<?> modifiedClass = ctClass.toClass();
        Object instance = modifiedClass.getDeclaredConstructor().newInstance();
        modifiedClass.getMethod("newMethod").invoke(instance); // 输出：This is a new method!
    }
}
